---
title: 概述
---

<Info>**协议修订版**：2025-03-26</Info>

模型上下文协议（MCP）由多个关键组件组成，协同工作：

- **基础协议**：核心 JSON-RPC 消息类型
- **生命周期管理**：连接初始化、能力协商和会话控制
- **服务器功能**：服务器暴露的资源、提示和工具
- **客户端功能**：客户端提供的采样和根目录列表
- **实用工具**：日志记录和参数补全等跨领域关注点

所有实现 **必须** 支持基础协议和生命周期管理组件。其他组件 **可以** 根据应用程序的具体需求选择实现。

这些协议层建立了清晰的关注点分离，同时支持客户端与服务器之间的丰富交互。模块化设计允许实现仅支持所需的功能。

## 消息

MCP 客户端与服务器之间的所有消息 **必须** 遵循 [JSON-RPC 2.0](https://www.jsonrpc.org/specification) 规范。协议定义了以下消息类型：

### 请求

请求由客户端发送到服务器，或反之，以发起操作。

```typescript
{
  jsonrpc: "2.0";
  id: string | number;
  method: string;
  params?: {
    [key: string]: unknown;
  };
}
```

- 请求 **必须** 包含字符串或整数 ID。
- 与基础 JSON-RPC 不同，ID **不得** 为 `null`。
- 在同一会话中，请求者 **不得** 重用之前的请求 ID。

### 响应

响应是对请求的回复，包含操作的结果或错误。

```typescript
{
  jsonrpc: "2.0";
  id: string | number;
  result?: {
    [key: string]: unknown;
  }
  error?: {
    code: number;
    message: string;
    data?: unknown;
  }
}
```

- 响应 **必须** 包含与对应请求相同的 ID。
- **响应** 进一步细分为 **成功结果** 或 **错误**。必须设置 `result` 或 `error` 之一，**不得** 同时设置两者。
- 结果 **可以** 遵循任何 JSON 对象结构，而错误 **必须** 至少包含错误代码和消息。
- 错误代码 **必须** 为整数。

### 通知

通知是客户端到服务器或服务器到客户端的单向消息。接收者 **不得** 发送响应。

```typescript
{
  jsonrpc: "2.0";
  method: string;
  params?: {
    [key: string]: unknown;
  };
}
```

- 通知 **不得** 包含 ID。

### 批处理

JSON-RPC 还定义了一种通过数组发送 [多个请求和通知的批处理](https://www.jsonrpc.org/specification#batch) 方法。MCP 实现 **可以** 支持发送 JSON-RPC 批处理，但 **必须** 支持接收 JSON-RPC 批处理。

## 授权

MCP 提供了一个用于 HTTP 的 [授权框架](/specification/2025-03-26/basic/authorization)。使用基于 HTTP 的传输的实现 **应该** 遵循此规范，而使用 STDIO 传输的实现 **不应该** 遵循此规范，而是应从环境中检索凭据。

此外，客户端和服务器 **可以** 协商自己的自定义认证和授权策略。

有关 MCP 授权机制演进的进一步讨论和贡献，请加入我们在
[GitHub 讨论区](https://github.com/modelcontextprotocol/specification/discussions) 的讨论，共同塑造协议的未来！

## 模式

协议的完整规范以 [TypeScript 模式](https://github.com/modelcontextprotocol/specification/blob/main/schema/2025-03-26/schema.ts) 定义。这是所有协议消息和结构的真实来源。

此外，还有一个 [JSON 模式](https://github.com/modelcontextprotocol/specification/blob/main/schema/2025-03-26/schema.json)，它是从 TypeScript 真实来源自动生成的，供各种自动化工具使用。
